#ifndef __DOUBLE_SQL_LIST_H__
#define __DOUBLE_SQL_LIST_H__

// 导入头文件
#include "log_in_data.h"

// 数据关系
// 定义双向链表节点结构体
typedef struct Double_Node {
    Log_in_data data;             // 数据域
    struct Double_Node* prev;    // 指向前一个节点的指针
    struct Double_Node* next;   // 指向下一个节点的指针
} Double_Node;

// 定义双向链表结构体
typedef struct Double_Link_List {
    Double_Node * next;     // 指向链表头节点的指针
} Double_Link_List;


// 数据操作
// 双向链表的创建
Double_Link_List *init_double_link_list();

// 双向链表的插入
void insert_double_node(Double_Link_List* list, Log_in_data data, int pos);

// 双向链表的删除
Log_in_data delete_double_node(Double_Link_List* list, int pos);

// 双向链表的查找
Double_Node* find_double_node_pos(Double_Link_List* list, int pos);
Double_Node* find_double_node_name(Double_Link_List* list, char* name);
// 按值查找返回位置
int find_pos(Double_Link_List *list, char *name);

// 双向链表的遍历
void print_forward_double_link_list(Double_Link_List *list);
void print_backwards_double_link_list(Double_Link_List* list);

// 双向链表的判空
int is_empty_double_link_list(Double_Link_List* list);

// 双向链表的清空
void clear_double_link_list(Double_Link_List* list);

// 双向链表的合并
Double_Link_List* merge_double_link_lists(Double_Link_List* list1, Double_Link_List* list2);

// 双向链表的销毁
void free_double_link_list(Double_Link_List ** list);




#endif

